	;使用更简单更紧凑的方法显示文字和数字
	jmp start
	
mytext db 'l',0x07,'a',0x07,'b',0x07,'e',0x07,'l',0x07,'o',0x07,'f',0x07
	   db 'f',0x07,'s',0x07,'e',0x07,'t',0x07,':',0x07
start:
	mov ax, 0x7c0
	mov ds, ax     ;设置数据段寄存器的置为0x7c0，目的是为了使标号的汇编地址与偏移地址相同
	
	mov ax, 0xb800
	mov es, ax     ;设置附加数据段寄存器的值为0xb800
	 
	cld ;清除FLAGS寄存器中的DF位，使得数据搬移往正方向进行
	mov si, mytext ;设置源偏移地址
	mov di, 0 ;设置目的偏移地址
	mov cx, (start-mytext)/2  ;设置重复次数
	rep movsw  ; rep指令执行前会判断cx的值是否大于0，执行后会将cx的值减1
	
	mov ax, current  ;获取标号的汇编地址
	mov cx, 5        ;设置循环次数
	mov bx, 10       ;设置除数
	mov si, ax       ;保存数据存放地址

again:	
	xor dx, dx
	div bx
	mov [si], dl
	inc si
	loop again       ;loop指令执行时先将CX的内容减一，如果cx的内容不为0则转移到指定位置执行，否则顺序执行后面的指令
	
	;在屏幕上显示current的汇编地址
	mov bx, current
	mov si, 4 ;si 寄存器设置为4
	
show:
	mov al, [bx+si] ;将地址bx+si上的内容存放在al中,基址变址寻址的组合只能为[bx+si][bp+si][bx+di][bx+di]
	add al, 0x30 ;将数字转换为ACIIX
	mov ah, 0x04
	mov [es:di], ax
	add di, 2
	dec si
	jns show    ;jns执行时会判断eflag寄存器中的SF位，为0则跳转到标号处继续执行，为1则顺序执行下一条指令
	
	jmp $
	
current:
	times 510-($-$$) db 0  ; $表示当前指令的汇编地址，$$表示代码起始汇编地址
	
	db 0x55, 0xAA